<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Phpsession {
var $_flash = array();
	
	// constructor
function Phpsession() {
		session_start();
		$this->flashinit();
	}
	
	/* Save a session variable.
	* @paramstringName of variable to save
	* @parammixedValue to save
	* @paramstring  (optional) Namespace to use. Defaults to 'default'. 'flash' is reserved.
	*/
function save($var, $val, $namespace = 'default') {
		if ($var == null) {
				$_SESSION[$namespace] = $val;
			} else {
				$_SESSION[$namespace][$var] = $val;
			}
	}
	
	/* Get the value of a session variabe
	* @paramstring  Name of variable to load. null loads all variables in namespace (associative array)
	* @paramstring(optional) Namespace to use, defaults to 'default'
	*/
function get($var = null, $namespace = 'default') {
		if(isset($var))
				return isset($_SESSION[$namespace][$var]) ? $_SESSION[$namespace][$var] : null;
			else
				return isset($_SESSION[$namespace]) ? $_SESSION[$namespace] : null;
	}
	
	/* Clears all variables in a namespace
	*/
function clear($var = null, $namespace = 'default') {
		if(isset($var) && ($var !== null))
				unset($_SESSION[$namespace][$var]);
			else
				unset($_SESSION[$namespace]);
	}
	
	/* Initializes the flash variable routines
	*/
function flashinit() {
		$this->_flash = $this->get(null, 'flash');
		$this->clear(null, 'flash');
	}
	
	/* Saves a flash variable. These are only saved for one page load
	* @paramstringVariable name to save
	* @parammixedValue to save
	*/
function flashsave($var, $val) {
		$this->save($var, $val, 'flash');
	}
	
	/* Gets the value of a flash variable. These are only saved for one page load, so the variable must
	* have either been set or had flashkeep() called on the previous page load
	* @paramstringVariable name to get
	*/
function flashget($var) {
		if (isset($this->_flash[$var])) {
				return $this->_flash[$var];
			} else {
				return null;
			}
	}
	
	/* Keeps the value of a flash variable for another page load.
	* @paramstring(optional) Variable name to keep, or null to keep all. Defaults to keep all (null)
	*/
function flashkeep($var = null) {
		if ($var != null) {
				$this->flashsave($var, $this->flashget($var));
			} else {
				$this->save(null, $this->_flash, 'flash');
			}
	}
}
?> 